﻿/*
 * Created by SharpDevelop.
 * User: CeCi
 * Date: 23/04/2014
 * Time: 07:41 p.m.
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;
using System.Data;
using System.Data.OleDb;
using Gestión_UTN.Entities;

namespace Gestión_UTN.daimpl
{
    /// <summary>
    /// Description of inscripciondaimpl.
    /// </summary>
    public class inscripciondaimpl : da.inscripcionda
    {
        public inscripciondaimpl()
        {
        }

        public bool SaveInscripcion(DateTime fecha, int alu_dni, int car_id, bool titulo, bool planilla, bool fotos, bool copiaDoc)
        {
            bool ingresada = false;

            OleDbConnection conex = null;
            OleDbTransaction trans = null;

            try
            {
                conex = util.Conexion.conectarAccess();
                trans = null;

                if (null != conex)
                {

                    string sql = "INSERT INTO ins_inscripciones(ins_fecha, alu_dni, car_id, ins_titulo, ins_planilla, ins_fotos, ins_copiaDocumento)" +
                                "VALUES(@fecha, @alu_dni, @car_id, @titulo, @planilla, @fotos, @copiaDocumento)";

                    conex.Open();
                    trans = conex.BeginTransaction();

                    OleDbCommand insertar = new OleDbCommand(sql, conex, trans);

                    insertar.Parameters.AddWithValue("@fecha", fecha);
                    insertar.Parameters.AddWithValue("@alu_dni", alu_dni);
                    insertar.Parameters.AddWithValue("@car_id", car_id);
                    insertar.Parameters.AddWithValue("@titulo", titulo);
                    insertar.Parameters.AddWithValue("@planilla", planilla);
                    insertar.Parameters.AddWithValue("@fotos", fotos);
                    insertar.Parameters.AddWithValue("@copiaDocumento", copiaDoc);

                    insertar.ExecuteNonQuery();

                    trans.Commit();

                    ingresada = true;

                    conex.Close();
                }

            }
            catch (Exception ex)
            {
                ingresada = false;
                trans.Rollback();
                conex.Close();

                throw new exceptions.daexception(ex.Message);
            }

            return ingresada;
        }

        public bool DeleteInscripcion(DateTime fecha, int alu_dni)
        {
            bool eliminada = false;

            OleDbConnection conex = null;
            OleDbTransaction trans = null;

            try
            {
                conex = util.Conexion.conectarAccess();
                trans = null;

                if (null != conex)
                {

                    string sql = "DELETE FROM ins_inscripciones " +
                        "WHERE ins_fecha = @fecha AND " +
                        "alu_dni = @alu_dni";

                    conex.Open();

                    trans = conex.BeginTransaction();

                    OleDbCommand eliminar = new OleDbCommand(sql, conex, trans);

                    eliminar.Parameters.AddWithValue("@fecha", fecha);
                    eliminar.Parameters.AddWithValue("@alu_dni", alu_dni);

                    eliminar.ExecuteNonQuery();

                    trans.Commit();

                    eliminada = true;

                    conex.Close();
                }

            }
            catch (Exception ex)
            {
                eliminada = false;
                trans.Rollback();
                conex.Close();

                throw new exceptions.daexception(ex.Message);
            }

            return eliminada;
        }

        public bool ModifyInscripcion(DateTime fecha_anterior, int alu_dni_anterior, DateTime fecha, int alu_dni, int car_id, bool titulo, bool planilla, bool fotos, bool copiaDoc)
        {
            bool modificada = false;

            OleDbConnection conex = null;
            OleDbTransaction trans = null;

            try
            {
                conex = util.Conexion.conectarAccess();
                trans = null;

                if (null != conex)
                {

                    string sql = "UPDATE ins_inscripciones SET ins_fecha = @fecha, alu_dni = @alu_dni, car_id = @car_id, ins_titulo = @titulo, " +
                                    "ins_planilla = @planilla, ins_fotos = @fotos, ins_copiaDocumento = @copiaDocumento" +
                                    " WHERE ins_fecha = @fecha_anterior AND alu_dni = @dni_anterior";

                    conex.Open();
                    trans = conex.BeginTransaction();

                    OleDbCommand modificar = new OleDbCommand(sql, conex, trans);

                    modificar.Parameters.AddWithValue("@fecha", fecha);
                    modificar.Parameters.AddWithValue("@alu_dni", alu_dni);
                    modificar.Parameters.AddWithValue("@car_id", car_id);
                    modificar.Parameters.AddWithValue("@titulo", titulo);
                    modificar.Parameters.AddWithValue("@planilla", planilla);
                    modificar.Parameters.AddWithValue("@fotos", fotos);
                    modificar.Parameters.AddWithValue("@copiaDocumento", copiaDoc);
                    modificar.Parameters.AddWithValue("@fecha_anterior", fecha_anterior);
                    modificar.Parameters.AddWithValue("@dni_anterior", alu_dni_anterior);

                    modificar.ExecuteNonQuery();

                    trans.Commit();

                    modificada = true;

                    conex.Close();
                }

            }
            catch (Exception ex)
            {
                modificada = false;
                trans.Rollback();
                conex.Close();

                throw new exceptions.daexception(ex.Message);
            }

            return modificada;
        }

        public System.Data.DataTable FindAllInscripciones()
        {
            DataTable tablaInscripciones = null;

            OleDbConnection conex = null;

            try
            {
                conex = util.Conexion.conectarAccess();
                tablaInscripciones = new DataTable();

                if (null != conex)
                {

                    string sql = "SELECT ins_fecha, alu_dni, car_nombre," +
                                    "ins_titulo,ins_fotos,ins_planilla, ins_copiaDocumento " +
                                    "FROM ins_inscripciones ins, car_carreras car " +
                                    "WHERE ins.car_id = car.car_id";

                    OleDbDataAdapter adaptador = new OleDbDataAdapter(sql, conex);

                    conex.Open();

                    adaptador.Fill(tablaInscripciones);

                    conex.Close();
                }

            }
            catch (Exception ex)
            {
                tablaInscripciones = null;
                conex.Close();

                throw new exceptions.daexception(ex.Message);
            }

            return tablaInscripciones;
        }

        public Gestión_UTN.Entities.Inscripcion FindInscripcionByDNI(int alu_dni)
        {
            Inscripcion inscripcion = null;

            OleDbConnection conex = null;

            try
            {
                conex = util.Conexion.conectarAccess();

                if (null != conex)
                {

                    string sql = "SELECT ins_id, ins_fecha, alu_dni, car_id," +
                                    "ins_titulo,ins_fotos,ins_planilla, ins_copiaDocumento " +
                                    "FROM ins_inscripciones ins " +
                                    "WHERE alu_dni = @dni";

                    OleDbCommand consulta = new OleDbCommand(sql, conex);

                    conex.Open();

                    consulta.Parameters.AddWithValue("@dni", alu_dni);

                    OleDbDataReader lector = consulta.ExecuteReader();

                    while (lector.Read())
                    {
                        int ins_id = Convert.ToInt32(lector[0].ToString());
                        DateTime fecha = Convert.ToDateTime(lector[1].ToString());
                        int dni = Convert.ToInt32(lector[2].ToString());
                        int car_id = Convert.ToInt32(lector[3].ToString());
                        bool titulo = Convert.ToBoolean(lector[4].ToString());
                        bool fotos = Convert.ToBoolean(lector[5].ToString());
                        bool planilla = Convert.ToBoolean(lector[6].ToString());
                        bool copiaDoc = Convert.ToBoolean(lector[7].ToString());

                        inscripcion = new Inscripcion(ins_id, fecha, dni, car_id, titulo, planilla, fotos, copiaDoc);
                    }


                    conex.Close();
                }

            }
            catch (Exception ex)
            {
                inscripcion = null;
                conex.Close();

                throw new exceptions.daexception(ex.Message);
            }

            return inscripcion;
        }

        public Gestión_UTN.Entities.Inscripcion FindInscripcionById(int id)
        {
            Inscripcion inscripcion = null;

            OleDbConnection conex = null;

            try
            {
                conex = util.Conexion.conectarAccess();

                if (null != conex)
                {

                    string sql = "SELECT ins_id, ins_fecha, alu_dni, car_id," +
                                    "ins_titulo,ins_fotos,ins_planilla, ins_copiaDocumento " +
                                    "FROM ins_inscripciones ins " +
                                    "WHERE ins_id = @id";

                    OleDbCommand consulta = new OleDbCommand(sql, conex);

                    conex.Open();

                    consulta.Parameters.AddWithValue("@id", id);

                    OleDbDataReader lector = consulta.ExecuteReader();

                    while (lector.Read())
                    {
                        int ins_id = Convert.ToInt32(lector[0].ToString());
                        DateTime fecha = Convert.ToDateTime(lector[1].ToString());
                        int dni = Convert.ToInt32(lector[2].ToString());
                        int car_id = Convert.ToInt32(lector[3].ToString());
                        bool titulo = Convert.ToBoolean(lector[4].ToString());
                        bool fotos = Convert.ToBoolean(lector[5].ToString());
                        bool planilla = Convert.ToBoolean(lector[6].ToString());
                        bool copiaDoc = Convert.ToBoolean(lector[7].ToString());

                        inscripcion = new Inscripcion(ins_id, fecha, dni, car_id, titulo, planilla, fotos, copiaDoc);
                    }


                    conex.Close();
                }

            }
            catch (Exception ex)
            {
                inscripcion = null;
                conex.Close();

                throw new exceptions.daexception(ex.Message);
            }

            return inscripcion;
        }
    }
}
